package com.sunriz.ctrl.server.utils.scada;

import com.sunriz.ctrl.server.Constant.ScadaConstant;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * ClassName: ScadaFileUtil
 * Package: com.sunriz.javafx.server.utils
 * Description:
 *
 * @Author BuTang
 * @Create 2024/12/26 14:50
 * @Version 1.0
 */
@Slf4j
public class FileManager {
    public static String currentFile = "";

    /**
     * todo 仅在开发时使用
     */
    public static String testFile = "demo.json";

    /**
     * 私有构造函数，防止外部实例化
     */
    private FileManager() {
        throw new UnsupportedOperationException("Utility class cannot be instantiated");
    }

    /**
     * 添加配置文件
     * @param fileName 文件名
     * @return 错误信息
     */
    public static String addFile(String fileName){
        String filePath = ScadaConstant.FILE_PATH;
        File file = new File(filePath + fileName);
        try {
            // 创建文件，如果文件已存在则不会抛出异常
            boolean isCreated = file.createNewFile();
            if (isCreated) {
                return ScadaConstant.FILE_ADD_SUCCESS;
            } else {
                return ScadaConstant.FILE_ALREADY_EXIST;
            }
        } catch (IOException e) {
            e.printStackTrace();
            return ScadaConstant.FILE_ADD_FAIL;
        }
    }

    /**
     * 获取文件夹列表
     * @return list文件列表
     */
    public static List<String> getFileList(){
        List<String> fileNames = new ArrayList<>();
        File dir = new File(ScadaConstant.FILE_PATH);

        // 检查目录是否存在且是一个有效的目录
        if (dir.exists() && dir.isDirectory()) {
            // 获取目录中的所有文件和子目录
            File[] files = dir.listFiles();

            if (files != null) {
                // 遍历所有文件
                for (File file : files) {
                    if (file.isFile()) {
                        // 如果是文件，添加文件名到列表
                        fileNames.add(file.getName());
                    }
                }
            }
        } else {
            log.error("指定路径不存在或不是一个目录！");
        }

        return fileNames;
    }

    /**
     * 删除配置文件
     * @param fileName 文件名
     * @return 删除结果
     */
    public static String deleteFile(String fileName) {
        String filePath = ScadaConstant.FILE_PATH;
        File file = new File(filePath + fileName);

        // 检查文件是否存在
        if (file.exists()) {
            try {
                // 删除文件
                if (file.delete()) {
                    return ScadaConstant.FILE_DELETE_SUCCESS;
                } else {
                    return ScadaConstant.FILE_DELETE_FAIL;
                }
            } catch (SecurityException e) {
                e.printStackTrace();
                return ScadaConstant.FILE_DELETE_FAIL_PERMISSION;
            }
        } else {
            return ScadaConstant.FILE_NOT_EXIST;
        }
    }
}
